package sync;

class Bank2 {
	private int money = 10000;	// 잔고
	
	public int getMoney() {	// 현재 잔액 확인
		return money;
	}
	
	public void setMoney(int money) {	// 현재 잔액을 변화
		this.money = money;
	}
	
	public void saveMoney(int save) {	// save 만큼의 돈을 계좌에 입금
		int m = money;	// 현재 잔액 확인
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {e.printStackTrace();}
		setMoney(m + save); // 확인해두었던 잔액에 입금액을 더하고 잔고에 반영
	}
	
	public void minusMoney(int minus) {
		int m = money;	// 현재 잔액 확인
		try {
			Thread.sleep(200);
		} catch (InterruptedException e) {e.printStackTrace();}
		setMoney(m - minus);	// 확인해두었던 잔액으로부터 출금액을 빼고 잔고에 반영
	}
	
}

class Park2 extends Thread {
	public void run() {
		synchronized (NotSyncMain2.myBank) {
			NotSyncMain2.myBank.saveMoney(3000);
			System.out.println("3000원 입금후 잔액: " + NotSyncMain2.myBank.getMoney());
		}
	}
}

class ParkWife2 extends Thread {
	public void run() {
		synchronized (NotSyncMain2.myBank) {
			NotSyncMain2.myBank.minusMoney(1000);
			System.out.println("1000원 출금후 잔액: " + NotSyncMain2.myBank.getMoney());
		}
	}
}

public class NotSyncMain2 {
	
	public static Bank2 myBank = new Bank2();	// 박씨와 박씨부인의 공유 통장
	
	public static void main(String[] args) {
		
		Park2 p = new Park2();
		ParkWife2 w = new ParkWife2();
		p.start();
		try {
			Thread.sleep(200);
		} catch (InterruptedException e) {e.printStackTrace();}
		w.start();
	}
	
}
